package com.goudan.rabbitmq.demo.ack;

import com.goudan.rabbitmq.demo.util.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

public class Work03 {
    private static final String ACK_QUEUE_NAME = "ack_queue";

    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMqUtils.getChannel();
        System.out.println("Work03  不公平分发");
        // 消息消费的时候如何处理消息
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody());
//            SleepUtils.sleep(10);
            System.out.println(" 接收到消息:" + message);
            /**
             * 采用手动应答
             * 1. 消息标记 tag
             * 2. 是否批量应答未应答消息：不批量信道中的消息
             */
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        };
        // 设置不公平分发，多个消费者应该共同设置
        int prefetchCount = 1;
        channel.basicQos(prefetchCount);
        // **采用手动应答
        boolean autoAck = false;
        channel.basicConsume(ACK_QUEUE_NAME, autoAck, deliverCallback, (consumerTag) -> {
            System.out.println(consumerTag + " 消费者取消消费接口回调逻辑");
        });
    }
}
